home *** CD-ROM | disk | FTP | other *** search
- static char diffdtime_prog[] = "@(#)Zeitdifferenzen in Sekunden ermitteln";
- static char diffdtime_ver[] = "@(#)v1.00/kr ; 09.06.91";
- /* Autor Klaus Rath
- **
- ** Deklaration long diffdtime(char *zeit1, char *zeit2);
- **
- ** Übergabe Erwartet werden 2 Strings in folgenden optionalen Formaten:
- ** hh:mm[:ss] -- Formate TI_HM_D,TI_HMS_D
- ** hh.mm[.ss] -- Formate TI_HM_P,TI_HMS_P
- ** hhmm[ss] -- DDB/4-Formate TI_HM_DB,TI_HMS_DB
- ** wobei der Trenner ':' oder '.' bestimmt, welches Formatpaar
- ** in Frage kommt - bzw. Datenbankformat, falls kein Trenner.
- ** Da die beiden Zeiten einzeln geprüft und konvertiert werden,
- ** dürfen unterschiedliche Formate verwendet werden!
- **
- ** Rückgabe Zurückgegeben wird die Differenz in Sekunden als long-Wert.
- ** Da eine Differenz von 0 sec ja durchaus vorkommen kann, eignet
- ** sich die 0 nicht als Fehlerkennung. diffdtime gibt für diesen
- ** Fall die Zahl 90909090 zurück, deren normales Zustandekommen
- ** ziemlich unwahrscheinlich sein dürfte, zumal sich die Zeiten
- ** z.Zt. alle im Rahmen eines Tages abspielen.
- **
- ** Anmerkung
- **
- ** Änderungen 1.00 ; 09.06.91
- ** - Erste vollwertige Version
- */
-
- #include <time.h>
- #include <string.h>
- #include <stdio.h>
- #ifdef __TURBOC__
- #define ANSI
- #define MSDOS
- #include <stdlib.h>
- #endif
- #include "datum.h"
-
- #ifdef ANSI
- long diffdtime(char *zeit1, char *zeit2)
- #else
- long diffdtime(zeit1,zeit2)
- char *zeit1;
- char *zeit2;
- #endif
- {
- long sekunden_summe1,sekunden_summe2;
- long ergebnis;
- char h_s1[3],h_s2[3],m_s1[3],m_s2[3],s_s1[3],s_s2[3];
- long stunden1,stunden2,minuten1,minuten2,sekunden1,sekunden2;
- int laenge1,laenge2;
-
- /* Längenüberprüfung :
- */
- laenge1 = strlen(zeit1);
- if ( laenge1 == 4 || laenge1 == 5 || laenge1 == 6 || laenge1 == 8 )
- ;
- else
- return((long)FEHLER);
-
- laenge2 = strlen(zeit2);
- if ( laenge2 == 4 || laenge2 == 5 || laenge2 == 6 || laenge2 == 8)
- ;
- else
- return((long)FEHLER);
-
- /* Format überprüfen und umkopieren :
- */
- /* 1. Zeit :
- */
- if ( ( zeit1[2] == ':' || zeit1[2] == '.' ) &&
- ( laenge1 == 5 || laenge1 == 8 ) ) {
- h_s1[0] = zeit1[0];
- h_s1[1] = zeit1[1];
- h_s1[2] = '\0';
- m_s1[0] = zeit1[3];
- m_s1[1] = zeit1[4];
- m_s1[2] = '\0';
- if ( laenge1 == 8 ) {
- s_s1[0] = zeit1[6];
- s_s1[1] = zeit1[7];
- s_s1[2] = '\0';
- }
- else if ( laenge1 == 5 ) {
- s_s1[0] = '0';
- s_s1[1] = '0';
- s_s1[2] = '\0';
- }
- else
- return((long)FEHLER);
- } /* ENDE: Doppelpunkt- und Punkt-Formate */
-
- else if ( laenge1 == 4 || laenge1 == 6 ) { /* Datenbankformate */
- h_s1[0] = zeit1[0];
- h_s1[1] = zeit1[1];
- h_s1[2] = '\0';
- m_s1[0] = zeit1[2];
- m_s1[1] = zeit1[3];
- m_s1[2] = '\0';
- if ( laenge1 == 6 ) {
- s_s1[0] = zeit1[4];
- s_s1[1] = zeit1[5];
- s_s1[2] = '\0';
- }
- else if ( laenge1 == 4 ) {
- s_s1[0] = '0';
- s_s1[1] = '0';
- s_s1[2] = '\0';
- }
- else
- return((long)FEHLER);
- } /* ENDE: Datenbankformate */
- else
- return((long)FEHLER);
- /* ENDE:if(Formatprüfung und Kopierung für 1.Datum) */
-
- /* 2. Zeit :
- */
- if ( ( zeit2[2] == ':' || zeit2[2] == '.' ) &&
- ( laenge2 == 5 || laenge2 == 8 ) ) {
- h_s2[0] = zeit2[0];
- h_s2[1] = zeit2[1];
- h_s2[2] = '\0';
- m_s2[0] = zeit2[3];
- m_s2[1] = zeit2[4];
- m_s2[2] = '\0';
- if ( laenge1 == 8 ) {
- s_s2[0] = zeit2[6];
- s_s2[1] = zeit2[7];
- s_s2[2] = '\0';
- }
- else if ( laenge1 == 5 ) {
- s_s2[0] = '0';
- s_s2[1] = '0';
- s_s2[2] = '\0';
- }
- else
- return((long)FEHLER);
- } /* ENDE: Doppelpunkt- und Punkt-Formate */
-
- else if ( laenge2 == 4 || laenge2 == 6 ) { /* Datenbankformate */
- h_s1[0] = zeit2[0];
- h_s2[1] = zeit2[1];
- h_s2[2] = '\0';
- m_s2[0] = zeit2[2];
- m_s2[1] = zeit2[3];
- m_s2[2] = '\0';
- if ( laenge1 == 6 ) {
- s_s2[0] = zeit2[4];
- s_s2[1] = zeit2[5];
- s_s2[2] = '\0';
- }
- else if ( laenge1 == 4 ) {
- s_s2[0] = '0';
- s_s2[1] = '0';
- s_s2[2] = '\0';
- }
- else
- return((long)FEHLER);
- } /* ENDE: Datenbankformat */
- else
- return((long)FEHLER);
- /* ENDE:if(Formatprüfung und Kopierung für 2.Datum) */
-
- /* Konvertierung :
- */
- stunden1 = atol(h_s1);
- minuten1 = atol(m_s1);
- sekunden1 = atol(s_s1);
-
- stunden2 = atol(h_s2);
- minuten2 = atol(m_s2);
- sekunden2 = atol(s_s2);
-
- if ( minuten1 > 59L || minuten1 < 0L || stunden1 > 23L ||stunden1 < 0L ||
- sekunden1 > 59L || sekunden1 < 0L ||
- minuten2 > 59L || minuten2 < 0L || stunden2 > 23L ||stunden2 < 0L ||
- sekunden2 > 59L || sekunden2 < 0L
- )
- return((long)FEHLER);
-
- sekunden_summe1 = 0L;
- sekunden_summe2 = 0L;
-
- /* Stunden, Minuten und Sekunden aufaddieren :
- */
- sekunden_summe1 = (long)((stunden1*3600L) + (minuten1*60L) + sekunden1);
- sekunden_summe2 = (long)((stunden2*3600L) + (minuten2*60L) + sekunden2);
-
- /* Gesamtergebnis :
- */
- ergebnis = sekunden_summe2 -sekunden_summe1;
-
- return(ergebnis);
-
- } /* ENDE: diffdtime() */
-